package com.atguigu.gulimall.ware.service.impl;

import com.atguigu.common.constant.WareConstant;
import com.atguigu.gulimall.ware.entity.WareOrderTaskEntity;
import com.atguigu.gulimall.ware.service.WareOrderTaskService;
import com.baomidou.mybatisplus.extension.service.IService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.List;
import java.util.Map;

import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.atguigu.common.utils.PageUtils;
import com.atguigu.common.utils.Query;

import com.atguigu.gulimall.ware.dao.WareOrderTaskDetailDao;
import com.atguigu.gulimall.ware.entity.WareOrderTaskDetailEntity;
import com.atguigu.gulimall.ware.service.WareOrderTaskDetailService;


@Service("wareOrderTaskDetailService")
public class WareOrderTaskDetailServiceImpl extends ServiceImpl<WareOrderTaskDetailDao, WareOrderTaskDetailEntity> implements WareOrderTaskDetailService {

    @Autowired
    private WareOrderTaskService wareOrderTaskService;
    @Override
    public PageUtils queryPage(Map<String, Object> params) {
        IPage<WareOrderTaskDetailEntity> page = this.page(
                new Query<WareOrderTaskDetailEntity>().getPage(params),
                new QueryWrapper<WareOrderTaskDetailEntity>()
        );

        return new PageUtils(page);
    }

    @Override
    public boolean unlockStock(Long taskDetailId) {
        WareOrderTaskDetailEntity detail = new WareOrderTaskDetailEntity();
        detail.setId(taskDetailId);
        detail.setLockStatus(WareConstant.WareOrderTaskDetailLockStatusEnum.RELEASED.getCode());
        return this.updateById(detail);
    }

    @Override
    public List<WareOrderTaskDetailEntity> getTaskDetailsByOrderSn(String orderSn) {
        // 查询库存工作单信息

        WareOrderTaskEntity orderTask = wareOrderTaskService.getOne(new QueryWrapper<WareOrderTaskEntity>().eq("order_sn", orderSn));
        return this.list(new QueryWrapper<WareOrderTaskDetailEntity>()
                .eq("task_id", orderTask.getId())
                .eq("lock_status", WareConstant.WareOrderTaskDetailLockStatusEnum.LOCKED.getCode()));
    }

}